/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.negocio;

import ejb.dao.RecargaDAOLocal;
import ejb.dao.TarjetaDAOLocal;
import ejb.dao.VendedorDAOLocal;
import entidades.Recarga;
import entidades.Tarjeta;
import entidades.Vendedor;
import ejb.excepciones.MontoInvalidoException;
import java.math.BigDecimal;
import java.util.Date;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.enterprise.context.NonexistentConversationException;

/**
 *
 * @author paulo
 */
@Stateless
public class GestorVendedorService implements GestorVendedorServiceLocal {

    @EJB
    private RecargaDAOLocal recargaDAO;
    @EJB
    private VendedorDAOLocal vendedorDAO;
    @EJB
    private TarjetaDAOLocal tarjetaDAO;

    @Override
    public Recarga recargarTarjeta(int idTarjeta, BigDecimal monto, int cuit) throws MontoInvalidoException {
        if (monto.signum() == 1) {
            Tarjeta tarjeta = tarjetaDAO.buscarPorId(idTarjeta);
            if (tarjeta != null) {
                Vendedor vendedor = vendedorDAO.buscarPorId(cuit);
                if (vendedor != null) {
                    //actualizar saldo y crear recarga
                    tarjeta.setSaldo(tarjeta.getSaldo().add(monto));
                    Recarga recarga = new Recarga();
                    recarga.setCuit(vendedor);
                    recarga.setIdRecarga(idTarjeta);
                    recarga.setFechaHora(new Date());
                    recarga.setMonto(monto);
                    //persistir tarjeta y recarga
                    tarjetaDAO.actualizar(tarjeta);
                    return recargaDAO.crear(recarga);
                } else {
                    throw new NonexistentConversationException("El vendedor con id " + String.valueOf(cuit) + " no existe");
                }
            } else {
                throw new NonexistentConversationException("La tarjeta con id " + String.valueOf(idTarjeta) + " no existe");
            }
        } else {
            throw new MontoInvalidoException("El monto de la recarga es inválido");
        }
    }
}
